
# coding: utf-8

# In[1]:

import os
os.chdir('D:/PatentData/2016/rawdata')
os.getcwd()
import codecs

# In[2]:

from xml.dom.minidom import parse, parseString
import re

def process_single_xml_file(filename, writeon):
    xml_file = codecs.open(filename, 'r', 'iso-8859-1').read()
    xml_list = re.split('<\?xml.*?\?>', xml_file)    # 한 xml_file을 특허별로 나누어줌
    
    index = 1

    for one_xml in xml_list:

        if index > 1:

            dom = parseString(one_xml)
            publ = dom.getElementsByTagName("publication-reference")[0]
            pid = publ.getElementsByTagName("doc-number")[0].firstChild.nodeValue
                   
            if len(dom.getElementsByTagName("us-references-cited")) > 0:
                group = dom.getElementsByTagName("us-references-cited")[0]
                citations = group.getElementsByTagName("us-citation")

                for citation in citations:
                    
                    if len(citation.getElementsByTagName("country")) > 0:
                        if citation.getElementsByTagName("country")[0].firstChild.nodeValue == "US":

                            documentid = citation.getElementsByTagName("document-id")[0]
                            cited = documentid.getElementsByTagName("doc-number")[0].firstChild.nodeValue
                            writeon.write(pid + "*" + cited + "\n")
                            
            # print(pid)    # 문제가 발생한 특허를 확인하려면 이 기능을 키고 돌릴 것
        index += 1


# In[3]:

import sys

def select_files_in_folder(dir, ext):
    for file in os.listdir(dir):    # 'dir'에 있는 모든 파일들 이름으로 list를 만듦
        if file.endswith('.%s' % ext):    # 확장자가 .ext인 파일일 경우 True
            yield os.path.join(dir, file)    # 'dir/file' 형태의 새로운 dir를 뱉어냄
            
# 'dir' 안에 확장자가 '.ext'인 모든 file들로 이루어진 generator(한번 iterate 시키고 나면 사라지는 list)를 만드는 함수


# In[4]:

file = codecs.open("cite_2016.csv", 'w', 'utf8')
file.write("CITING*CITED\n")

for xmlfile in select_files_in_folder('D:/PatentData/2016/rawdata', 'xml'):
    print("PROCESSING...", xmlfile)
    process_single_xml_file(xmlfile, file)

print("DONE")


# In[ ]:



